/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using FAS;
using FasGUI;
/**
 *
 * @author Payo
 */
public class ConexionMySQL
{
    /*VARIABLES DE USO GENERAL*/
    private MySqlConnection sqlCn;
    private DataSet Ds;
    private MySqlDataAdapter sqlDa;
    private MySqlCommand sqlCm;
    private string conexion = "Server = " + ip + "; Database = fas; Uid = fasuser; Pwd = GJ5fEnaZbTBAEFBB";
    public static String ip;
    /* Metodo: getQuery
     * Funcion: obtener DataSet de una query
     * String query - query a realizar
     * Regresa DataSet
     */

    public DataSet GetQuery(String query)
    {
        try
        {
            sqlCn = new MySqlConnection(conexion);
            sqlCm = sqlCn.CreateCommand();
            sqlCm.CommandText = query;
            sqlCn.Open();
            sqlDa = new MySqlDataAdapter(sqlCm);
            Ds = new DataSet();
            sqlDa.Fill(Ds);
            return Ds;
        }
        catch (Exception e)
        {
            new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
            return null;
        }
        finally
        {
            sqlCn.Close();
        }
    }//fin del metodo getQuery

    /* Metodo: AcccionesDB
     * Funcion: Processos en la base de datos
     * String: Diccionario de parametros y valores, nombre del stored procedure
     * Regresa T/F
     */

    public Boolean AccionesDB(Dictionary<String, Object> diccionario, String procedure)
    {
        try
        {
            sqlCn = new MySqlConnection(conexion);
            sqlCn.Open();
            sqlCm = new MySqlCommand(procedure, sqlCn);
            sqlCm.CommandType = CommandType.StoredProcedure;
            foreach (var row in diccionario)
                sqlCm.Parameters.AddWithValue(row.Key, row.Value);
            sqlCm.ExecuteNonQuery();
            return true;
        }
        catch (Exception e)
        {
            new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
            return false;
        }
        finally
        {
            sqlCn.Close();
        }

    } // fin del metodo InsertarParametros

    public Boolean AccionesDB(String procedure)
    {
        try
        {
            sqlCn = new MySqlConnection(conexion);
            sqlCn.Open();
            sqlCm = new MySqlCommand(procedure, sqlCn);
            sqlCm.ExecuteNonQuery();
            return true;
        }
        catch (Exception e)
        {
            new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
            return false;
        }
        finally
        {
            sqlCn.Close();
        }

    } // fin del metodo InsertarParametros

    /* Metodo: insertar
     * Funcion: Meter registro a la base de datos
     * Diccionario parametros y valores, nombre del stored procedure, atributo id de la tabla, nombre de la tabla
     * Regresa ID/-1
     */

    public int insertar(Dictionary<String, Object> diccionario, String procedure, String id, String tabla)
    {
        try
        {
            sqlCn = new MySqlConnection(conexion);
            sqlCn.Open();
            sqlCm = new MySqlCommand(procedure, sqlCn);
            sqlCm.CommandType = CommandType.StoredProcedure;
            foreach (var row in diccionario)
                sqlCm.Parameters.AddWithValue(row.Key, row.Value);
            sqlCm.ExecuteNonQuery();
            MySqlCommand last = new MySqlCommand("SELECT " + id + " FROM " + tabla + " ORDER BY " + id + " DESC LIMIT 1", sqlCn);
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            adapter.SelectCommand = last;
            DataSet data = new DataSet();
            adapter.Fill(data);
            return int.Parse(data.Tables[0].Rows[0][id].ToString());
        }
        catch (Exception e)
        {
            new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
            return -1;
        }
        finally
        {
            sqlCn.Close();
        }

    } // fin del metodo Insertar
    /* Metodo: insertar
     * Funcion: Meter registro a la base de datos
     * Diccionario parametros y valores, nombre del stored procedure, atributo id de la tabla, nombre de la tabla
     * Regresa ID/-1
     */

    public int insertar(Dictionary<String, Object> diccionario, String procedure)
    {
        try
        {
            sqlCn = new MySqlConnection(conexion);
            sqlCn.Open();
            sqlCm = new MySqlCommand(procedure, sqlCn);
            sqlCm.CommandType = CommandType.StoredProcedure;
            foreach (var row in diccionario)
                sqlCm.Parameters.AddWithValue(row.Key, row.Value);
            sqlCm.ExecuteNonQuery();
            return 1;
        }
        catch (Exception e)
        {
            new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
            return -1;
        }
        finally
        {
            sqlCn.Close();
        }

    } // fin del metodo Insertar

} //fin de la clase principal ConexionMySql